using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

using UMEVOR.DTO;
using UMEVOR.VO;

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace UMEVOR.DAL
{
    public class DALT_ARTIGO : DALConnection
    {

        #region Incluir

        public void incluir(T_ARTIGO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" INSERT INTO T_ARTIGO ");
                SQL.Append("    (ID_CATEGORIA, ID_ARTICULISTA, DT_ARTIGO, DT_INS_ARTIGO, TX_TITULO_ARTIGO, TX_DESC_ARTIGO, TX_FONTE, ");
                SQL.Append("    TX_PALAVRAS_CHV) VALUES ");
                SQL.Append("    (" + obj.ID_CATEGORIA.ToString() + "," + obj.ID_ARTICULISTA.ToString());
                SQL.Append(", str_to_date('" + obj.DT_ARTIGO.ToString("dd/MM/yyy") + "', '%d/%m/%Y'), ");
                SQL.Append("str_to_date('" + obj.DT_INS_ARTIGO.ToString("dd/MM/yyy") + "', '%d/%m/%Y'), '");
                SQL.Append(obj.TX_TITULO_ARTIGO + "','" + obj.TX_DESC_ARTIGO + "', '" + obj.TX_FONTE + "', '");
                SQL.Append(obj.TX_PALAVRAS_CHV + "')");
                
                DbCommand insertT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());

                insertT_ARTIGO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(insertT_ARTIGO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Incluir[]

        public void incluir(T_ARTIGO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] insertT_ARTIGO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ARTIGO o = obj[index];
                    SQL = new StringBuilder();

                    SQL.Append(" INSERT INTO T_ARTIGO ");
                    SQL.Append("    (ID_ARTIGO, ID_CATEGORIA, ID_ARTICULISTA, DT_ARTIGO, DT_INS_ARTIGO, TX_TITULO_ARTIGO, TX_DESC_ARTIGO, TX_FONTE, TX_PALAVRAS_CHV, QT_VISITA, DT_ULT_ACESSO) ");
                    SQL.Append(" VALUES ");
                    SQL.Append("    (:ID_ARTIGO, :ID_CATEGORIA, :ID_ARTICULISTA, :DT_ARTIGO, :DT_INS_ARTIGO, :TX_TITULO_ARTIGO, :TX_DESC_ARTIGO, :TX_FONTE, :TX_PALAVRAS_CHV, :QT_VISITA, :DT_ULT_ACESSO) ");

                    insertT_ARTIGO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(insertT_ARTIGO[index], ":ID_ARTIGO", DbType.Int64, o.ID_ARTIGO);
                    database.AddInParameter(insertT_ARTIGO[index], ":ID_CATEGORIA", DbType.Int64, o.ID_CATEGORIA);
                    database.AddInParameter(insertT_ARTIGO[index], ":ID_ARTICULISTA", DbType.Int64, o.ID_ARTICULISTA);
                    database.AddInParameter(insertT_ARTIGO[index], ":DT_ARTIGO", DbType.DateTime, o.DT_ARTIGO);
                    database.AddInParameter(insertT_ARTIGO[index], ":DT_INS_ARTIGO", DbType.DateTime, o.DT_INS_ARTIGO);
                    database.AddInParameter(insertT_ARTIGO[index], ":TX_TITULO_ARTIGO", DbType.String, o.TX_TITULO_ARTIGO);
                    database.AddInParameter(insertT_ARTIGO[index], ":TX_DESC_ARTIGO", DbType.String, o.TX_DESC_ARTIGO);
                    database.AddInParameter(insertT_ARTIGO[index], ":TX_FONTE", DbType.String, o.TX_FONTE);
                    database.AddInParameter(insertT_ARTIGO[index], ":TX_PALAVRAS_CHV", DbType.String, o.TX_PALAVRAS_CHV);
                    database.AddInParameter(insertT_ARTIGO[index], ":QT_VISITA", DbType.Int32, o.QT_VISITA);
                    database.AddInParameter(insertT_ARTIGO[index], ":DT_ULT_ACESSO", DbType.Object, o.DT_ULT_ACESSO);

                    insertT_ARTIGO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in insertT_ARTIGO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar

        public void alterar(T_ARTIGO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" UPDATE T_ARTIGO SET ");
                SQL.Append("    ID_CATEGORIA = " + obj.ID_CATEGORIA.ToString() + " , ");
                SQL.Append("    ID_ARTICULISTA = " + obj.ID_ARTICULISTA.ToString() + " , ");
                SQL.Append("    DT_ARTIGO = str_to_date('" + obj.DT_ARTIGO.ToString("dd/MM/yyy") + "', '%d/%m/%Y') , ");                
                SQL.Append("    TX_TITULO_ARTIGO = '" + obj.TX_TITULO_ARTIGO + "' , ");
                SQL.Append("    TX_DESC_ARTIGO = '" + obj.TX_DESC_ARTIGO + "' , ");
                SQL.Append("    TX_FONTE = '" + obj.TX_FONTE + "' , ");
                SQL.Append("    TX_PALAVRAS_CHV = '" + obj.TX_PALAVRAS_CHV + "'");                
                SQL.Append(" WHERE ");
                SQL.Append("    ID_ARTIGO = " + obj.ID_ARTIGO.ToString());

                DbCommand updateT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());

                updateT_ARTIGO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(updateT_ARTIGO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar[]

        public void alterar(T_ARTIGO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] updateT_ARTIGO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ARTIGO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" UPDATE T_ARTIGO SET ");
                    SQL.Append("    ID_CATEGORIA = :ID_CATEGORIA , ");
                    SQL.Append("    ID_ARTICULISTA = :ID_ARTICULISTA , ");
                    SQL.Append("    DT_ARTIGO = :DT_ARTIGO , ");
                    SQL.Append("    DT_INS_ARTIGO = :DT_INS_ARTIGO , ");
                    SQL.Append("    TX_TITULO_ARTIGO = :TX_TITULO_ARTIGO , ");
                    SQL.Append("    TX_DESC_ARTIGO = :TX_DESC_ARTIGO , ");
                    SQL.Append("    TX_FONTE = :TX_FONTE , ");
                    SQL.Append("    TX_PALAVRAS_CHV = :TX_PALAVRAS_CHV , ");
                    SQL.Append("    QT_VISITA = :QT_VISITA , ");
                    SQL.Append("    DT_ULT_ACESSO = :DT_ULT_ACESSO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_ARTIGO = :ID_ARTIGO  ");

                    updateT_ARTIGO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(updateT_ARTIGO[index], ":ID_ARTIGO", DbType.Int64, o.ID_ARTIGO);
                    database.AddInParameter(updateT_ARTIGO[index], ":ID_CATEGORIA", DbType.Int64, o.ID_CATEGORIA);
                    database.AddInParameter(updateT_ARTIGO[index], ":ID_ARTICULISTA", DbType.Int64, o.ID_ARTICULISTA);
                    database.AddInParameter(updateT_ARTIGO[index], ":DT_ARTIGO", DbType.DateTime, o.DT_ARTIGO);
                    database.AddInParameter(updateT_ARTIGO[index], ":DT_INS_ARTIGO", DbType.DateTime, o.DT_INS_ARTIGO);
                    database.AddInParameter(updateT_ARTIGO[index], ":TX_TITULO_ARTIGO", DbType.String, o.TX_TITULO_ARTIGO);
                    database.AddInParameter(updateT_ARTIGO[index], ":TX_DESC_ARTIGO", DbType.String, o.TX_DESC_ARTIGO);
                    database.AddInParameter(updateT_ARTIGO[index], ":TX_FONTE", DbType.String, o.TX_FONTE);
                    database.AddInParameter(updateT_ARTIGO[index], ":TX_PALAVRAS_CHV", DbType.String, o.TX_PALAVRAS_CHV);
                    database.AddInParameter(updateT_ARTIGO[index], ":QT_VISITA", DbType.Int32, o.QT_VISITA);
                    database.AddInParameter(updateT_ARTIGO[index], ":DT_ULT_ACESSO", DbType.Object, o.DT_ULT_ACESSO);

                    updateT_ARTIGO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in updateT_ARTIGO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir

        public void excluir(T_ARTIGO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" DELETE FROM T_ARTIGO ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_ARTIGO = " + obj.ID_ARTIGO.ToString());

                DbCommand deleteT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());

                deleteT_ARTIGO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(deleteT_ARTIGO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir[]

        public void excluir(T_ARTIGO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] deleteT_ARTIGO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ARTIGO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" DELETE FROM T_ARTIGO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_ARTIGO = :ID_ARTIGO  ");

                    deleteT_ARTIGO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(deleteT_ARTIGO[index], ":ID_ARTIGO", DbType.Int64, o.ID_ARTIGO);

                    deleteT_ARTIGO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in deleteT_ARTIGO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ObterPorPK

        public T_ARTIGO obterPorPK(long pID_ARTIGO)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ARTIGO ");
                SQL.Append(" WHERE ");
                SQL.Append("  ID_ARTIGO = " + pID_ARTIGO.ToString() + " ORDER BY TX_TITULO_ARTIGO");

                DbCommand consultaT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ARTIGO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ARTIGO, DALConnection.transaction);
                T_ARTIGO obj = null;

                if (reader.Read())
                {
                    obj = new T_ARTIGO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTIGO")))
                    {
                        obj.ID_ARTIGO = Int64.Parse(reader["ID_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CATEGORIA")))
                    {
                        obj.ID_CATEGORIA = Int64.Parse(reader["ID_CATEGORIA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTICULISTA")))
                    {
                        obj.ID_ARTICULISTA = Int64.Parse(reader["ID_ARTICULISTA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ARTIGO")))
                    {
                        obj.DT_ARTIGO = DateTime.Parse(reader["DT_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INS_ARTIGO")))
                    {
                        obj.DT_INS_ARTIGO = DateTime.Parse(reader["DT_INS_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO_ARTIGO")))
                    {
                        obj.TX_TITULO_ARTIGO = reader["TX_TITULO_ARTIGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_ARTIGO")))
                    {
                        obj.TX_DESC_ARTIGO = reader["TX_DESC_ARTIGO"].ToString().Replace("#", "\r\n");
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FONTE")))
                    {
                        obj.TX_FONTE = reader["TX_FONTE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_PALAVRAS_CHV")))
                    {
                        obj.TX_PALAVRAS_CHV = reader["TX_PALAVRAS_CHV"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("QT_VISITA")))
                    {
                        obj.QT_VISITA = Int32.Parse(reader["QT_VISITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ULT_ACESSO")))
                    {
                        obj.DT_ULT_ACESSO = DateTime.Parse(reader["DT_ULT_ACESSO"].ToString());
                    }
                }
                reader.Dispose();
                consultaT_ARTIGO.Dispose();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ListarTodos

        public List<T_ARTIGO> listarTodos()
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ARTIGO ORDER BY TX_TITULO_ARTIGO");

                DbCommand consultaT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ARTIGO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ARTIGO, DALConnection.transaction);
                List<T_ARTIGO> lista = new List<T_ARTIGO>();
                T_ARTIGO obj = null;

                while (reader.Read())
                {
                    obj = new T_ARTIGO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTIGO")))
                    {
                        obj.ID_ARTIGO = Int64.Parse(reader["ID_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CATEGORIA")))
                    {
                        obj.ID_CATEGORIA = Int64.Parse(reader["ID_CATEGORIA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTICULISTA")))
                    {
                        obj.ID_ARTICULISTA = Int64.Parse(reader["ID_ARTICULISTA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ARTIGO")))
                    {
                        obj.DT_ARTIGO = DateTime.Parse(reader["DT_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INS_ARTIGO")))
                    {
                        obj.DT_INS_ARTIGO = DateTime.Parse(reader["DT_INS_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO_ARTIGO")))
                    {
                        obj.TX_TITULO_ARTIGO = reader["TX_TITULO_ARTIGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_ARTIGO")))
                    {
                        obj.TX_DESC_ARTIGO = reader["TX_DESC_ARTIGO"].ToString().Replace("#", "\r\n");
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FONTE")))
                    {
                        obj.TX_FONTE = reader["TX_FONTE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_PALAVRAS_CHV")))
                    {
                        obj.TX_PALAVRAS_CHV = reader["TX_PALAVRAS_CHV"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("QT_VISITA")))
                    {
                        obj.QT_VISITA = Int32.Parse(reader["QT_VISITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ULT_ACESSO")))
                    {
                        obj.DT_ULT_ACESSO = DateTime.Parse(reader["DT_ULT_ACESSO"].ToString());
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_ARTIGO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<VOT_ARTIGO> consultar(string descricao, int id_categoria,int id_articulista)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT a.ID_ARTIGO as ARTIGO, a.ID_CATEGORIA as CATEGORIA, a.ID_ARTICULISTA as ARTICULISTA,a.DT_ARTIGO ,");
                SQL.Append(" a.DT_INS_ARTIGO, a.TX_TITULO_ARTIGO, a.TX_DESC_ARTIGO, a.TX_FONTE, a.TX_PALAVRAS_CHV,");
                SQL.Append("a.QT_VISITA,a.DT_ULT_ACESSO, r.TX_NOME_ARTICULISTA,c.TX_DESC_CATEGORIA ");
                SQL.Append("FROM T_ARTIGO a, T_ARTICULISTA r, T_CATEGORIA c ");
                SQL.Append(" WHERE a.ID_ARTICULISTA = r.ID_ARTICULISTA AND a.ID_CATEGORIA = c.ID_CATEGORIA");

                if(!descricao.Equals(""))
                    SQL.Append("  AND a.TX_TITULO_ARTIGO like '" + descricao + "%'");

                if (!id_categoria.Equals(0))
                    SQL.Append(" AND c.ID_CATEGORIA = " + id_categoria);

                if (!id_articulista.Equals(0))
                    SQL.Append(" AND r.ID_ARTICULISTA = " + id_articulista);

                SQL.Append(" ORDER BY a.DT_ARTIGO DESC, a.TX_TITULO_ARTIGO ASC");
                DbCommand consultaT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ARTIGO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ARTIGO, DALConnection.transaction);
                List<VOT_ARTIGO> lista = new List<VOT_ARTIGO>();
                VOT_ARTIGO obj = null;

                while (reader.Read())
                {
                    obj = new VOT_ARTIGO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ARTIGO")))
                    {
                        obj.ID_ARTIGO = Int64.Parse(reader["ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("CATEGORIA")))
                    {
                        obj.ID_CATEGORIA = Int64.Parse(reader["CATEGORIA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ARTICULISTA")))
                    {
                        obj.ID_ARTICULISTA = Int64.Parse(reader["ARTICULISTA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ARTIGO")))
                    {
                        obj.DT_ARTIGO = DateTime.Parse(reader["DT_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INS_ARTIGO")))
                    {
                        obj.DT_INS_ARTIGO = DateTime.Parse(reader["DT_INS_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO_ARTIGO")))
                    {
                        obj.TX_TITULO_ARTIGO = reader["TX_TITULO_ARTIGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_ARTIGO")))
                    {
                        obj.TX_DESC_ARTIGO = reader["TX_DESC_ARTIGO"].ToString().Replace("#", "\r\n");
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FONTE")))
                    {
                        obj.TX_FONTE = reader["TX_FONTE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_PALAVRAS_CHV")))
                    {
                        obj.TX_PALAVRAS_CHV = reader["TX_PALAVRAS_CHV"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("QT_VISITA")))
                    {
                        obj.QT_VISITA = Int32.Parse(reader["QT_VISITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ULT_ACESSO")))
                    {
                        obj.DT_ULT_ACESSO = DateTime.Parse(reader["DT_ULT_ACESSO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_NOME_ARTICULISTA")))
                    {
                        obj.TX_ARTICULISTA = reader["TX_NOME_ARTICULISTA"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_CATEGORIA")))
                    {
                        obj.TX_CATEGORIA = reader["TX_DESC_CATEGORIA"].ToString();
                    }
                    lista.Add(obj);

                }
                reader.Dispose();
                consultaT_ARTIGO.Dispose();
                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<VOT_ARTIGO> consultarPalavraChave(string palavraChave)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT a.ID_ARTIGO as ARTIGO, a.ID_CATEGORIA as CATEGORIA, a.ID_ARTICULISTA as ARTICULISTA,a.DT_ARTIGO ,");
                SQL.Append(" a.DT_INS_ARTIGO, a.TX_TITULO_ARTIGO, a.TX_DESC_ARTIGO, a.TX_FONTE, a.TX_PALAVRAS_CHV,");
                SQL.Append("a.QT_VISITA,a.DT_ULT_ACESSO, r.TX_NOME_ARTICULISTA,c.TX_DESC_CATEGORIA ");
                SQL.Append("FROM T_ARTIGO a, T_ARTICULISTA r, T_CATEGORIA c ");
                SQL.Append(" WHERE a.ID_ARTICULISTA = r.ID_ARTICULISTA AND a.ID_CATEGORIA = c.ID_CATEGORIA");

                SQL.Append("  AND a.TX_PALAVRAS_CHV like '%" + palavraChave + "%'");

                SQL.Append(" ORDER BY a.DT_ARTIGO DESC, a.TX_TITULO_ARTIGO ASC");
                DbCommand consultaT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ARTIGO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ARTIGO, DALConnection.transaction);
                List<VOT_ARTIGO> lista = new List<VOT_ARTIGO>();
                VOT_ARTIGO obj = null;

                while (reader.Read())
                {
                    obj = new VOT_ARTIGO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ARTIGO")))
                    {
                        obj.ID_ARTIGO = Int64.Parse(reader["ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("CATEGORIA")))
                    {
                        obj.ID_CATEGORIA = Int64.Parse(reader["CATEGORIA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ARTICULISTA")))
                    {
                        obj.ID_ARTICULISTA = Int64.Parse(reader["ARTICULISTA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ARTIGO")))
                    {
                        obj.DT_ARTIGO = DateTime.Parse(reader["DT_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INS_ARTIGO")))
                    {
                        obj.DT_INS_ARTIGO = DateTime.Parse(reader["DT_INS_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO_ARTIGO")))
                    {
                        obj.TX_TITULO_ARTIGO = reader["TX_TITULO_ARTIGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_ARTIGO")))
                    {
                        obj.TX_DESC_ARTIGO = reader["TX_DESC_ARTIGO"].ToString().Replace("#", "\r\n");
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FONTE")))
                    {
                        obj.TX_FONTE = reader["TX_FONTE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_PALAVRAS_CHV")))
                    {
                        obj.TX_PALAVRAS_CHV = reader["TX_PALAVRAS_CHV"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("QT_VISITA")))
                    {
                        obj.QT_VISITA = Int32.Parse(reader["QT_VISITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ULT_ACESSO")))
                    {
                        obj.DT_ULT_ACESSO = DateTime.Parse(reader["DT_ULT_ACESSO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_NOME_ARTICULISTA")))
                    {
                        obj.TX_ARTICULISTA = reader["TX_NOME_ARTICULISTA"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_CATEGORIA")))
                    {
                        obj.TX_CATEGORIA = reader["TX_DESC_CATEGORIA"].ToString();
                    }
                    lista.Add(obj);

                }
                reader.Dispose();
                consultaT_ARTIGO.Dispose();
                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<T_ARTIGO> consultarPortal(string quantidade)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ARTIGO ORDER BY TX_TITULO_ARTIGO");

                DbCommand consultaT_ARTIGO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ARTIGO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ARTIGO, DALConnection.transaction);
                List<T_ARTIGO> lista = new List<T_ARTIGO>();
                T_ARTIGO obj = null;

                while (reader.Read())
                {
                    obj = new T_ARTIGO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTIGO")))
                    {
                        obj.ID_ARTIGO = Int64.Parse(reader["ID_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CATEGORIA")))
                    {
                        obj.ID_CATEGORIA = Int64.Parse(reader["ID_CATEGORIA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ARTICULISTA")))
                    {
                        obj.ID_ARTICULISTA = Int64.Parse(reader["ID_ARTICULISTA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ARTIGO")))
                    {
                        obj.DT_ARTIGO = DateTime.Parse(reader["DT_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INS_ARTIGO")))
                    {
                        obj.DT_INS_ARTIGO = DateTime.Parse(reader["DT_INS_ARTIGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO_ARTIGO")))
                    {
                        obj.TX_TITULO_ARTIGO = reader["TX_TITULO_ARTIGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_DESC_ARTIGO")))
                    {
                        obj.TX_DESC_ARTIGO = reader["TX_DESC_ARTIGO"].ToString().Replace("#", "\r\n");
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FONTE")))
                    {
                        obj.TX_FONTE = reader["TX_FONTE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_PALAVRAS_CHV")))
                    {
                        obj.TX_PALAVRAS_CHV = reader["TX_PALAVRAS_CHV"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("QT_VISITA")))
                    {
                        obj.QT_VISITA = Int32.Parse(reader["QT_VISITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_ULT_ACESSO")))
                    {
                        obj.DT_ULT_ACESSO = DateTime.Parse(reader["DT_ULT_ACESSO"].ToString());
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_ARTIGO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

    }
}

